//
//  LPFHomeController.swift
//  WeiBo
//
//  Created by mac on 16/4/17.
//  Copyright © 2016年 mac. All rights reserved.
//

import UIKit

private let HomeTableViewCellId = "HomeTableViewCellId"

class LPFHomeController: LPFVisitorTableVC {
    
    // 保存微博数据数组
    var status: [LPFStatusModel] = [LPFStatusModel]()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        if !isLogin{
            visitorView?.setVisitorInfo(nil, title: nil)
            return
        }
        setupUI()
        
        setupTableViewInfo()
        
        // 请求微博首页数据
//        loadData {[weak self] (statuss) -> () in
//            
//            self?.status = statuss
//            
//            self?.tableView.reloadData()
//        }
        
        //加载数据
        loadData(indicatorView.isAnimating())
    }
    
    // MARK: -  设置视图
    private func setupUI(){
        navigationController!.view.insertSubview(showCountLabel, belowSubview: navigationController!.navigationBar)
        
        showCountLabel.frame = CGRect(x: 0, y: 64 - 34, width: SCREENW, height: 34)
    }
    
    private func setupTableViewInfo(){
        // 注册cell
        tableView.registerClass(LPFStatusCell.self, forCellReuseIdentifier: HomeTableViewCellId)
        
        // UITableViewAutomaticDimension 自动计算行高
        tableView.rowHeight = UITableViewAutomaticDimension
        
        //预估行高
        tableView.estimatedRowHeight = 200
        
        // 设置风格
        tableView.separatorStyle = .None
        
        // 设置tablView 的footView
        tableView.tableFooterView = indicatorView
        // 添加下拉刷新控件
        tableView.addSubview(refresh)
        
        refresh.addTarget(self, action: "refreshAction", forControlEvents: UIControlEvents.ValueChanged)
        
    }
    
    // 下拉刷新调用方法
    @objc private func refreshAction(){
//        print("开始刷新")
        loadData(indicatorView.isAnimating())
    }
    
    // MARK: -  懒加载控件 菊花
    private lazy var indicatorView: UIActivityIndicatorView = {
    let view = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        
        view.color = ThemeColor
        
        return view
    }()
    
    // MARK: - 自定义刷新控件
    private lazy var refresh: LPFRefreshControl = LPFRefreshControl()
    
    // MARK: - 显示得到多少条数据label
    private lazy var showCountLabel: UILabel = {
        let label = UILabel(textColor: UIColor.whiteColor(), textFont: 14)
        label.textAlignment = .Center
        label.backgroundColor = ThemeColor
        label.text = "显示微博条数文字"
        label.hidden = true
        return label
    }()
}

// MARK: - 数据源,代理
extension LPFHomeController{
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return status.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(HomeTableViewCellId, forIndexPath: indexPath) as! LPFStatusCell
        
        cell.status = status[indexPath.row]
        
        // 监听 转发评论赞 点击事件
        cell.toolBarView.statusToolBarViewClosure = { [weak self] (type: LPFStatusToolBarViewType) in
            print(self?.status[indexPath.row].id)
            
            switch type{
            case .retweet:
                print("转发")
            case .comment:
                print("评论")
            case .unlike:
                print("赞")
            }
        }
        
        return cell
    }
    
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        // 判断我们是否已经滑动到tableView 最底部
        // 防止用户在我们网络请求的时候 多次滑动 多次发送请求 加一个条件 只有菊花没有动画的时候在执行
        if indexPath.row == status.count - 1 && !indicatorView.isAnimating(){
            //设置动画
            indicatorView.startAnimating()
            loadData(indicatorView.isAnimating())
        }
    }
}

// MARK: - 请求微博首页数据
extension LPFHomeController{
    func loadData(isPullUp: Bool){
        var sinceId: Int64 = 0
        var maxId: Int64 = 0
        
        // 代表上拉加载更多
        if isPullUp{
            sinceId = 0
            maxId = status.last?.id ?? 0
            // 如果不判断 会返回来重复数据
            if maxId > 0{
                maxId = maxId - 1
            }
        }else{
            //下拉刷新
            sinceId = status.first?.id ?? 0
            maxId = 0
        }
        
        //获取微博首页数据
        LPFStatusDAL.getHomeStatus(sinceId, max_id: maxId) { (array) -> () in
            
            self.endRefreshing()
            // 定义一个临时数组
            var tempArray:[LPFStatusModel] = [LPFStatusModel]()
            // 遍历数组 转模型
            for dic in array{
                let status = LPFStatusModel(dict: dic)
                // 往数组中添加模型
                tempArray.append(status)
            }
            // 上拉加载更多
            if isPullUp{
                self.status = self.status + tempArray
            }else{
                // 下拉刷新
                self.status = tempArray + self.status
                
                // 如果我们showCountLabel 已经显示了 不应再执行动画了
                if self.showCountLabel.hidden == true{
                    self.setShowCountLabelAnim(tempArray.count)
                }
            }
            self.tableView.reloadData()
        }
        
    }
    
    // 停止动画方法
    func endRefreshing(){
        self.indicatorView.stopAnimating()
        self.refresh.endRefreshing()
    }
    
    //显示微博条数
    func setShowCountLabelAnim(count: Int){
        showCountLabel.hidden = false
        
        var countString = ""
        if count == 0{
            countString = "您已经是最新的微博了"
        }else{
            countString = "您更新了\(count)条微博"
        }
        
        //设置text
        showCountLabel.text = countString
        
        UIView.animateWithDuration(1, animations: { () -> Void in
            self.showCountLabel.frame.origin.y = 64
            
            }) { (_) -> Void in
                
                UIView.animateWithDuration(1, delay: 1, options: [], animations: { () -> Void in
                    self.showCountLabel.frame.origin.y = 64 - 34
                    
                    }, completion: { (_) -> Void in
                        self.showCountLabel.hidden = true
                })
                
//                UIView.animateWithDuration(1, animations: { () -> Void in
//                    
//                    self.showCountLabel.frame.origin.y = 64 - 34
//                    }, completion: { (_) -> Void in
//                        
//                        self.showCountLabel.hidden = true
//                })
        }
    }
 
}
